import {Global, Module, CacheInterceptor, CacheModule, HttpModule} from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';
// 加载配置文件 /config
import { ConfigModule } from './config/config.module';
// 公用模块 包含 错误模块
import { CommonModule } from './common/common.module';
// 加载路由业务模块
import { AuthModule } from './controller/auth/auth.module';
import { UserModule } from './controller/user/user.module';

// 加载数据库组件
import {MongoEntityModule} from "./entity/mongo/mongo.entity.module";
// 加载定时任务模块
import { ScheduleModule } from '@nestjs/schedule';
// 静态目录
import { ServeStaticModule } from '@nestjs/serve-static';
import {join} from 'path';
// 根节点
@Module({
  imports: [
      // 配置文件模块, 加载共享模块:ConfigService
      ConfigModule,
      // 公用模块
      CommonModule,
      // 控制路由模块/登陆模块
      AuthModule, // 权限控制模块
      UserModule, // 业务控制模块
      // 数据库模块
      MongoEntityModule,
      // 缓存组件
      CacheModule.register(),// @CacheKey('custom_key') @CacheTTL(20)
      // 定时任务
      ScheduleModule.forRoot(),
      // http模块
      HttpModule,
      // 静态目录 最好前后端分离，多活就行。
      ServeStaticModule.forRoot({
          rootPath: join(__dirname, '..', 'web/'),
      }),
  ],
    providers:[
        // 缓存
        {
            provide: APP_INTERCEPTOR,
            useClass: CacheInterceptor,
        },
    ],
  exports:[
      // 导入的文件都可以共享使用使用导出的文件
      ConfigModule,
      MongoEntityModule
  ]
})
export class MainModule {}
